/* $Id: UserFacade.java 
 * Copyright (C) 2011, TRAKHEES
 *  
 * Revision History
 *
 * Date  			Author 		    	Remarks
 * ---------------------------------------------------------------------------------
 *
 */
package ae.pcfc.etks.online.common.facade;

import java.util.List;

import ae.pcfc.etks.online.common.vo.ActivityVO;
import ae.pcfc.etks.online.common.vo.PagingVO;
import ae.pcfc.etks.online.common.vo.PasswordResetVO;
import ae.pcfc.etks.online.common.vo.SearchCriteriaActivityVO;
import ae.pcfc.etks.online.common.vo.SearchCriteriaCompanyVO;
import ae.pcfc.etks.online.common.vo.SearchCriteriaPersonVO;
import ae.pcfc.etks.online.common.vo.UserDetailVO;
import ae.pcfc.etks.online.common.vo.UserVO;
import ae.pcfc.etks.online.common.vo.WorkflowRequestVO;

public interface UserFacade extends Facade {
	/* public ClientCompanyVO userValidation(String userName, String password); */
	
	/**
	 * findUserByUserName
	 * Method to find user by username
	 * @param strUserName
	 * @return
	 * UserVO
	 */
	public UserVO findUserByUserName(String strUserName);

	/**
	 * getUserList
	 * Method to get all users
	 * @return
	 * List<UserVO>
	 */
	public List<UserVO> getUserList();

	/**
	 * getUserListByPagingParameters
	 * Method to list of users page based on paging information
	 * @param pagingVO
	 * @return
	 * List<UserVO>
	 */
	public List<UserVO> getUserListByPagingParameters(PagingVO pagingVO);
	
	/**
	 * findUserByPrimaryKey
	 * Method to find user by primary key
	 * @param id
	 * @return
	 * UserVO
	 */
	public UserVO findUserByPrimaryKey(Long id);
	
	/**
	 * findUserByEmail
	 * Method to find user by email address
	 * @param email
	 * @return
	 * UserVO
	 */
	public UserVO findUserByEmail(String email);
	
	/**
	 * resetPassword
	 * Method to reset password
	 * @param passwordResetVO
	 * void
	 */
	public void resetPassword(PasswordResetVO passwordResetVO);
	
	/**
	 * lockUser
	 * Method to lock user
	 * @param userVO
	 * void
	 */
	public void lockUser(UserVO userVO);

	/**
	 * addUser
	 * Method to add user
	 * @param userVO
	 * void
	 */
	public void addUser(UserVO userVO);
	
	/**
	 * findUserDetailByUserName:	Method to find the UserDetail value object of a user 
	 *
	 * @author Dicetek.Ismail
	 * @param	strUserName String - username of the user
	 * @return	UserDetailVO - UserDetailVO value object
	 */
	public UserDetailVO findUserDetailByUserName(String strUserName);
	
	/**
	 * searchUsersByTrakheesId:	Method to find the UserDetails of client based on trakhees Id. 
	 * This method finds the users belonging to the client and updates the Client information in the UserDetailVO 
	 *
	 * @author Dicetek.Ismail
	 * @param	strTrakheesId String - Trakhees Id of the Client
	 * @return	List<UserDetailVO> - List of UserDetailVO value objects associated to client
	 */
	public List<UserDetailVO> searchUsersByTrakheesId(String strTrakheesId);
	
	/**
	 * searchUsersByClientPerson:	Method to find the UserDetails of client persons. 
	 * This method first searches the client persons based on the SearchCriteriaPersonVO 
	 * Then finds the users associated to each of the client person by using searchUsersByTrakheesId method
	 *
	 * @author Dicetek.Ismail
	 * @param	searchCriteriaPersonVO SearchCriteriaPersonVO
	 * @return	List<UserDetailVO> - List of UserDetailVO value objects
	 */
	public List<UserDetailVO> searchUsersByClientPerson(SearchCriteriaPersonVO searchCriteriaPersonVO);	
	
	/**
	 * searchUsersByClientCompany:	Method to find the UserDetails of client companies. 
	 * This method first searches the client companies based on the SearchCriteriaCompanyVO. 
	 * Then finds the users associated to each of the client company by using searchUsersByTrakheesId method 
	 *
	 * @author Dicetek.Ismail
	 * @param	searchCriteriaCompanyVO SearchCriteriaCompanyVO
	 * @return	List<UserDetailVO> - List of UserDetailVO value objects
	 */
	public List<UserDetailVO> searchUsersByClientCompany(SearchCriteriaCompanyVO searchCriteriaCompanyVO);

	/**
	 * findActivitiesOfClientCompany:	Method to find the activities of a Company based on SearchCriteriaActivityVO 
	 * This method in turn routes the method call to the singleClientCompanyDomainObjectManager to fetch the detail  
	 *
	 * @author Dicetek.Ismail
	 * @param	searchCriteriaActivityVO SearchCriteriaActivityVO
	 * @return	List<ActivityVO> - List of Activity value objects
	 */
	public List<ActivityVO> findActivitiesOfClientCompany(SearchCriteriaActivityVO searchCriteriaActivityVO);

	/**
	 * getUserWorkflowRequests
	 * 
	 * @param userName
	 * @return
	 * List<UserRequestVO>
	 */
	public List<WorkflowRequestVO> getUserWorkflowRequests(String userName);	
	
	
	public List<String> getIncidentNoStepNames(Integer incidentNo, String processCode);
	
}
